#include <iostream>
#include <math.h>
#include <string.h>
#include <stdio.h>

using namespace std;

// Include GLEW
#include <GL/glew.h>

// Include GLFW
#include <GL/glfw.h>

// Include GLUT
#include <GL/glut.h>

// Include GLM
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>

using namespace glm;

#include "shader.hpp"
#include "text2D.hpp"
#include "controls.hpp"

#include "WavefrontOBJ.hpp"

#ifndef GRAPHICSENGINE_HPP
#define GRAPHICSENGINE_HPP

#define uint unsigned int

class GraphicEngine
{
private:
    //------- FPS -------
    int frameCount;
    float fps;
    char cfps[20];
    uint currentTime, previousTime, timeInterval;

    void initCalculateFPS();
    void calculateFPS();

    //------- GLFW -------
    GLuint VertexArrayID;

    int initWinodw();

    //------- Buttons -------
    bool light;
    bool cameraLight;
    bool noise;
    bool texture;

    void buttons(WavefrontOBJ &obj);
public:
    GraphicEngine();

    void graphicEngineLoop(string name);
};

#endif
